uniform mat4 projection;//投影矩阵
uniform mat4 modelView;//model-view-matrix模型视图变换矩阵

uniform mat3 normalMatrix;
uniform vec3 vLightPosition;
uniform vec4 vAmbientMaterial;//环境材质
uniform vec4 vSpecularMaterial;//镜面反射材质
uniform float shininess;//shininess 光泽强度：它由 OpenGL 程序传入。当然啦，最终是在 UI 通过 shininess 这个滑块控制的，该值越小，光泽强度越大。

uniform vec3 aCenter;

attribute vec4 vPosition;
attribute vec3 aNormal;
attribute vec4 vDiffuseMaterial;//漫反射材质

varying vec4 vDestinationColor;

void main(void)
{
    gl_Position = projection * modelView * vec4((vec3(vPosition)-aCenter),1.0);
    // Transform the normal's orientation into eye space.

    vec3 vNormal = vec3(modelView * vec4(aNormal, 0.0));
    vec3 N = normalize(normalMatrix * vNormal);
    vec3 L = normalize(vLightPosition);//单位化
    vec3 E = vec3(0, 0, 2);
    vec3 H = normalize(L + E);//平分线向量 H：它是通过将视线向量 E 与 光线向量 L 相加，并规范化计算而来；

    float df = max(dot(N, L),0.0);//df 漫反射因子：它是光线与顶点法线向量的点积，几何意义就是光线 L 与法线 N 之间夹角的 cos 值；
	//sf 镜面反射因子：它是视线 E 与光线 L 形成的夹角的平分线 H 与顶点法线向量的点积（几何意义就是平分线 H 与顶点法线 N 之间夹角的 cos 值），再 shininess 次方；
    float sf = max(0.0, dot(N, H));
    sf = pow(sf, shininess);

	//光照计算的最终颜色等于三种类型的光照效果的累加
    vDestinationColor = vAmbientMaterial + df * vDiffuseMaterial + sf * vSpecularMaterial;

}